package cn.iocoder.yudao.module.system.dal.mysql.exam;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.exam.ExamOptionDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.Collection;
import java.util.List;

/**
 * 测评选项 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface ExamOptionMapper extends BaseMapperX<ExamOptionDO> {

    /**
     * 根据题目ID查询选项列表
     *
     * @param questionId 题目ID
     * @return 选项列表
     */
    default List<ExamOptionDO> selectByQuestionId(Long questionId) {
        return selectList(new LambdaQueryWrapperX<ExamOptionDO>()
                .eq(ExamOptionDO::getQuestionId, questionId)
                .eq(ExamOptionDO::getStatus, 1)
                .orderByAsc(ExamOptionDO::getSort, ExamOptionDO::getOptionIndex));
    }

    /**
     * 根据题目ID列表查询选项列表
     *
     * @param questionIds 题目ID列表
     * @return 选项列表
     */
    default List<ExamOptionDO> selectByQuestionIds(Collection<Long> questionIds) {
        return selectList(new LambdaQueryWrapperX<ExamOptionDO>()
                .in(ExamOptionDO::getQuestionId, questionIds)
                .eq(ExamOptionDO::getStatus, 1)
                .orderByAsc(ExamOptionDO::getQuestionId, ExamOptionDO::getSort, ExamOptionDO::getOptionIndex));
    }

    /**
     * 根据第三方API题目ID和选项索引查询选项
     *
     * @param apiDetailsId 第三方API题目ID
     * @param optionIndex 选项索引
     * @return 选项信息
     */
    default ExamOptionDO selectByApiDetailsIdAndIndex(Long apiDetailsId, Integer optionIndex) {
        List<ExamOptionDO> list = selectList(new LambdaQueryWrapperX<ExamOptionDO>()
                .eq(ExamOptionDO::getApiDetailsId, apiDetailsId)
                .eq(ExamOptionDO::getOptionIndex, optionIndex)
                .eq(ExamOptionDO::getStatus, 1)
                .orderByDesc(ExamOptionDO::getCreateTime)
                .last("LIMIT 1"));
        return list.isEmpty() ? null : list.get(0);
    }

    /**
     * 根据题目ID、第三方API题目ID和选项索引查询选项（更精确的查询）
     *
     * @param questionId 题目ID
     * @param apiDetailsId 第三方API题目ID
     * @param optionIndex 选项索引
     * @return 选项信息
     */
    default ExamOptionDO selectByQuestionIdAndApiDetailsIdAndIndex(Long questionId, Long apiDetailsId, Integer optionIndex) {
        return selectOne(new LambdaQueryWrapperX<ExamOptionDO>()
                .eq(ExamOptionDO::getQuestionId, questionId)
                .eq(ExamOptionDO::getApiDetailsId, apiDetailsId)
                .eq(ExamOptionDO::getOptionIndex, optionIndex)
                .eq(ExamOptionDO::getStatus, 1));
    }

    /**
     * 根据题目ID删除选项
     *
     * @param questionId 题目ID
     * @return 删除数量
     */
    default int deleteByQuestionId(Long questionId) {
        return delete(new LambdaQueryWrapperX<ExamOptionDO>()
                .eq(ExamOptionDO::getQuestionId, questionId));
    }

    /**
     * 根据题目ID列表删除选项
     *
     * @param questionIds 题目ID列表
     * @return 删除数量
     */
    default int deleteByQuestionIds(Collection<Long> questionIds) {
        if (questionIds == null || questionIds.isEmpty()) {
            return 0;
        }
        return delete(new LambdaQueryWrapperX<ExamOptionDO>()
                .in(ExamOptionDO::getQuestionId, questionIds));
    }

    /**
     * 批量插入选项
     *
     * @param options 选项列表
     * @return 插入数量
     */
    default int insertBatch(List<ExamOptionDO> options) {
        if (options == null || options.isEmpty()) {
            return 0;
        }
        
        // 使用MyBatis Plus的批量插入
        for (ExamOptionDO option : options) {
            insert(option);
        }
        return options.size();
    }

}
